রিকার্সন (Recursion) একটি প্রোগ্রামিং কৌশল যেখানে একটি ফাংশন নিজেই নিজেকে কল করে। এটি একটি সমস্যা সমাধানের পদ্ধতি যেখানে একটি বড় সমস্যাকে ছোট উপ-সমস্যায় ভাগ করা হয় এবং প্রতিটি উপ-সমস্যা সমাধানের জন্য একই ফাংশন পুনরায় ব্যবহার করা হয়।
রিকার্সনের মাধ্যমে একটি বড় সমস্যা সমাধানের জন্য সেটিকে ছোট সমস্যাগুলিতে ভাগ করা হয়। প্রতিবার ফাংশনটি নিজেই নিজেকে কল করার সময় সমস্যার আকার ক্রমাগত ছোট হতে থাকে, এবং শেষ পর্যন্ত সমস্যাটি একটি নির্দিষ্ট শর্তে পৌঁছায়, যাকে বেস কেস বলা হয়। বেস কেসে পৌঁছালে ফাংশন আর নিজেকে কল করে না এবং রিকার্সন শেষ হয়।
১. বেস কেস (Base Case):
২. রিকার্সিভ কেস (Recursive Case):
নিচের উদাহরণে একটি ফাংশন রিকার্সনের মাধ্যমে একটি সংখ্যার ফ্যাক্টোরিয়াল গণনা করছে।
n! = n × (n − 1)!
কোড:
#include <iostream>
using namespace std;
int factorial(int n) {
// বেস কেস
if (n <= 1) {
return 1;
}
// রিকার্সিভ কেস
else {
return n * factorial(n - 1);
}
}
int main() {
int number = 5;
cout << "Factorial of " << number << " is: " << factorial(number) << endl;
return 0;
}
ব্যাখ্যা:
factorial
ফাংশন একটি পূর্ণসংখ্যা n
গ্রহণ করে।n
এর মান ১ বা তার চেয়ে ছোট হয়, তাহলে এটি ১ রিটার্ন করে (বেস কেস)।n
এর মান ১ এর চেয়ে বড় হয়, তাহলে এটি n * factorial(n - 1)
রিটার্ন করে এবং ফাংশন নিজেই নিজেকে কল করে।ফিবোনাচ্চি সিরিজে প্রতিটি সংখ্যা তার আগের দুটি সংখ্যার যোগফল। সিরিজের প্রথম দুটি সংখ্যা ০ এবং ১।
F(n) = F(n − 1) + F(n − 2)
কোড:
#include <iostream>
using namespace std;
int fibonacci(int n) {
// বেস কেস
if (n <= 1) {
return n;
}
// রিকার্সিভ কেস
else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int terms = 5;
for (int i = 0; i < terms; i++) {
cout << fibonacci(i) << " ";
}
return 0;
}
ব্যাখ্যা:
fibonacci
ফাংশন প্রতিটি n
এর জন্য ফিবোনাচ্চি মান গণনা করে।n
এর মান ০ বা ১ হয়, তাহলে এটি n
রিটার্ন করে (বেস কেস)।fibonacci(n - 1) + fibonacci(n - 2)
রিটার্ন করে এবং পুনরায় ফাংশন নিজেই নিজেকে কল করে।রিকার্সন প্রায়শই নিচের ক্ষেত্রে ব্যবহৃত হয়:
বৈশিষ্ট্য | রিকার্সন | পুনরাবৃত্তিমূলক সমাধান (Iterative Solution) |
---|---|---|
কোডের সরলতা | কোড সংক্ষিপ্ত এবং সহজ | কোড বড় এবং কখনো জটিল হতে পারে |
মেমোরি ব্যবহার | বেশি মেমোরি ব্যবহার করে | কম মেমোরি ব্যবহার করে |
পারফরম্যান্স | ধীরগতি হতে পারে | তুলনামূলকভাবে দ্রুত |
স্ট্যাক ওভারফ্লো ঝুঁকি | স্ট্যাক ওভারফ্লো হতে পারে | স্ট্যাক ওভারফ্লোর ঝুঁকি নেই |
রিকার্সন একটি কার্যকর প্রোগ্রামিং কৌশল যা কিছু নির্দিষ্ট সমস্যার জন্য অত্যন্ত উপযোগী। এটি সমস্যাকে ছোট ছোট অংশে ভাগ করে সমাধান করে। তবে, রিকার্সন ব্যবহারের সময় বেস কেসের দিকে বিশেষ মনোযোগ দিতে হয়, কারণ বেস কেসের অভাবে রিকার্সন চালু থাকবে এবং এটি স্ট্যাক ওভারফ্লো তৈরি করতে পারে।
common.read_more